package com.group.sliding.domain.po;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.group.sliding.domain.vo.ItemVO;
import com.group.sliding.enums.ItemADFlag;
import com.group.sliding.enums.ItemStatus;
import com.group.sliding.utils.BeanUtils;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Data
public class ItemDoc implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 商品id
     */
    private Long id;

    /**
     * 名称
     */
    private String name;

    /**
     * 价格（分）
     */
    private Integer price;

    /**
     * 库存数量
     */
    private Integer stock;

    /**
     * 商品图片
     */
    private String image;

    /**
     * 类目名称
     */
    private String category;

    /**
     * 品牌名称
     */
    private String brand;

    /**
     * 规格
     */
    private String spec;

    /**
     * 销量
     */
    private Integer sold;

    /**
     * 是否是推广广告
     */
    private Integer isAD;

    /**
     * 商品状态 1-正常，2-下架，3-删除
     */
    private Integer status;

    /**
     * 创建时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;

    /**
     * 搜索提示补全信息
     */
    private List<String> suggestInfo;

    public static ItemDoc fromItem(Item item) {
        ItemDoc itemDoc = BeanUtils.copyBean(item, ItemDoc.class);
        // 枚举转int
        itemDoc.setIsAD(item.getIsAD().getValue());
        itemDoc.setStatus(item.getStatus().getValue());
        // 获取补全信息
        // 补全信息用商品名空格分隔的第一个（不然太长而且很多类似）、品牌和种类
        String firstName = item.getName().split(" ")[0];
        List<String> suggestInfo = new ArrayList<>();
        // 二者可能一样，一样就只插一个
        if (!firstName.equals(item.getBrand())) {
            suggestInfo.add(firstName);
        }
        suggestInfo.add(item.getBrand());
        suggestInfo.add(item.getCategory());
        itemDoc.setSuggestInfo(suggestInfo);
        return itemDoc;
    }

    public Item toItem() {
        Item item = BeanUtils.copyBean(this, Item.class);
        item.setIsAD(ItemADFlag.of(isAD));
        item.setStatus(ItemStatus.of(status));
        return item;
    }

    public ItemVO toItemVO(String highlightedName) {
        Item item = this.toItem();
        ItemVO itemVO = BeanUtils.copyBean(item, ItemVO.class);
        // 多个高亮字段
        itemVO.setHighlightedName(highlightedName);
        return itemVO;
    }
}